package fun.sanguo.utils.sqlBuilder;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.jdbc.SQL;
import fun.sanguo.model.entity.interact.InteractPersonageLikeEntity;
import fun.sanguo.model.enums.DelFlagEnums;

/**
 * 互动-人物喜欢记录 sql语句生成类
 *
 * @author ZYP
 * @date 2023-10-13
 */
public class SqlBuilderInteractPersonageLike {

    /**
     * 人物喜欢记录表-新增
     *
     * @param interactPersonageLikeEntity
     * @return
     */
    public String insert(InteractPersonageLikeEntity interactPersonageLikeEntity) {
        // 已存在则更新
        return new SQL() {{
            INSERT_INTO("INTERACT_PERSONAGE_LIKE");
            VALUES("user_id", "#{userId}");
            VALUES("user_ip", "#{userIp}");
            VALUES("personage_id", "#{personageId}");
            VALUES("like_time", "#{likeTime}");
            // 通用字段
            VALUES("id", "#{id}");
            VALUES("create_by", "#{createBy}");
            VALUES("create_time", "#{createTime}");
            VALUES("update_by", "#{updateBy}");
            VALUES("update_time", "#{updateTime}");
            VALUES("remark", "#{remark}");
            VALUES("version", "#{version}");
            VALUES("del_flag", DelFlagEnums.NORMAL.getCode());
        }}.toString() + " ON DUPLICATE KEY UPDATE update_time=NOW(), del_flag=0";
    }

    /**
     * 人物喜欢记录表-删除
     *
     * @param interactPersonageLikeEntity
     * @return
     */
    public String delete(InteractPersonageLikeEntity interactPersonageLikeEntity) {
        return new SQL() {{
            UPDATE("INTERACT_PERSONAGE_LIKE");
            // 通用字段
            SET("update_by = #{updateBy}");
            SET("update_time = #{updateTime}");
            SET("del_flag = '" + DelFlagEnums.DELETED.getCode() + "'");
            // 条件
            WHERE("id = #{id}");
        }}.toString();
    }

    /**
     * 人物喜欢记录表-根据ID查询记录
     *
     * @param id
     * @return
     */
    public String getById(String id) {
        return new SQL() {{
            SELECT("*");
            FROM("INTERACT_PERSONAGE_LIKE");
            // 条件
            WHERE("id = #{id}");
        }}.toString();
    }

    /**
     * 人物喜欢记录表-根据用户与人物查询记录
     *
     * @param userId
     * @param personageId
     * @return
     */
    public String getByUserPersonage(String userId, String personageId) {
        return new SQL() {{
            SELECT("*");
            FROM("INTERACT_PERSONAGE_LIKE");
            // 条件
            WHERE("user_id = #{userId}");
            WHERE("personage_id = #{personageId}");
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
        }}.toString();
    }

    /**
     * 人物喜欢记录表-根据用户查询记录
     *
     * @param userId
     * @return
     */
    public String getByUser(String userId) {
        return new SQL() {{
            SELECT("*");
            FROM("INTERACT_PERSONAGE_LIKE");
            // 条件
            WHERE("user_id = #{userId}");
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
        }}.toString();
    }

    /**
     * 人物喜欢记录表-查询指定人物的喜欢数量
     *
     * @param personageId
     * @return
     */
    public String getSummaryByPersonage(String personageId) {
        return new SQL() {{
            SELECT("COUNT(1)");
            FROM("INTERACT_PERSONAGE_LIKE");
            if (StringUtils.isNotEmpty(personageId)) {
                WHERE("PERSONAGE_ID = '" + personageId + "'");
            }
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
        }}.toString();
    }

    /**
     * 人物喜欢记录表-查询所有人物的喜欢数量
     *
     * @return
     */
    public String getSummary() {
        return new SQL() {{
            SELECT("PERSONAGE_ID, COUNT(1) AS AMOUNT");
            FROM("INTERACT_PERSONAGE_LIKE");
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
            GROUP_BY("PERSONAGE_ID");
        }}.toString();
    }
}
